package com.ufaud.ais.sys.service;

import java.util.List;

import com.ufaud.ais.pub.exception.BusinessException;
import com.ufaud.ais.pub.service.IGenericCRUDService;
import com.ufaud.ais.sys.entity.MenuItem;

public interface IMenuItemService extends IGenericCRUDService<MenuItem, Long>{
	
	/**
	 * 功能: 根据Id返回菜单项，并初始化它的superMenuItem
	 * @author 林可  2010-7-23 下午08:28:52
	 * @param id
	 * @return
	 */
	MenuItem getMenuItemWithSuperMenuItem(Long id);
	
	/**
	 * 功能: 返回菜单表的完整对象图（根菜单为虚构）
	 * @author 林可  2010-7-23 上午10:39:53
	 * @return
	 */
	MenuItem getAllMenuItemInTreeStructure();

	/**
	 * 功能: 通过id返回一个菜单项以及它的所有直接、间接子菜单列表
	 * @author 林可  2010-7-23 上午10:17:54
	 * @param id
	 * @return
	 */
	List<MenuItem> getMenuItemWithDescendantsById(Long id);
	
	/**
	 * 功能: 通过id，返回一个菜单项的直接、间接父菜单项，和邻居菜单项的列表（不包括id所代表的菜单项自身）
	 * @author 林可  2010-7-23 上午10:20:31
	 * @param id
	 * @return
	 */
	List<MenuItem> getAncestorAndSiblingMenuItemById(Long id);

	/**
	 * 功能: 更新菜单项
	 * @author 林可  2010-7-23 上午10:33:35
	 * @param menuItem
	 */
	void updateMenuItem(MenuItem menuItem);

	/**
	 * 功能: 删除菜单项
	 * @author 林可  2010-7-23 上午10:33:45
	 * @param id
	 * @throws BusinessException 尚有子菜单项时，抛出业务级异常
	 */
	void deleteMenuItemById(Long id) throws BusinessException;
	
	/**
	 * 功能: 根据用户id取得该用户的菜单，并组织成树形结构返回
	 * @author 林可  2010-9-1 下午02:32:07
	 * @param id
	 */
	List<MenuItem> getMenuItemListInTreeStructureByUserId(Long id) ;
}
